package com.biwin.common.api.util;

import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;

import java.lang.reflect.Field;

/**
 * 枚举工具类
 *
 * @author biwin
 * @since 0.0.1
 */
public class BwEnumUtil extends EnumUtil {

    public static <E> E forValue(Class<E> enumClass, Integer code) {
        final Field[] fields = ReflectUtil.getFields(enumClass);
        final Enum<?>[] enums = (Enum<?>[]) enumClass.getEnumConstants();
        String fieldName;
        for (Field field : fields) {
            fieldName = field.getName();
            if (field.getType().isEnum() || "ENUM$VALUES".equals(fieldName) || "ordinal".equals(fieldName)) {
                // 跳过一些特殊字段
                continue;
            }
            for (Enum<?> enumObj : enums) {
                if (ObjectUtil.equal(code, ReflectUtil.getFieldValue(enumObj, field))) {
                    return (E) enumObj;
                }
            }
        }
        return null;
    }

}
